Google CloudのDataformでBigQueryにテーブルを作成してみた
データアナリティクス事業本部の鈴木です。
Google CloudのDataformでBigQueryにテーブルを作成してみたので、試したことをまとめました。
Dataformは記事執筆時点ではプレビュー版で、この記事もプレビュー版について記載しています。先立って試してみたい方の参考になりましたら幸いです。
Dataformとは
SQLを使用してBigQueryでスケーラブルなデータ変換パイプラインを開発・運用できるサービスです。 製品紹介ページは以下になります。
主な機能として、以下の3点が紹介されています。
- データ変換を管理するためのオープンソースのSQLベースの言語:Overview of Dataform coreに記載がありますが、オープンソースのソフトウエアのDataform Coreを使うことで、テーブル定義の一元的な作成や依存関係の構成など、さまざまな機能をSQLを使用して実現できます。
-
データパイプラインのフルマネージドサーバーレスオーケストレーション:SQLワークフローを手動およびほかのサービスによりトリガーすることで、最新バージョンのコードを使用してテーブルを更新することができます。
-
SQLで開発を行うための多機能のクラウド開発環境:ウェブブラウザからテーブルの定義・リアルタイムのエラーメッセージに関する問題の修正・依存関係の可視化・Gitへの変更のcommitなどを行えます。
検証の概要
今回は以下の3点を確認しました。
- Dataformのリポジトリ・ワークスペースを作成する。
- BigQueryのデータセットにテーブル・ビュー・マテリアライズドビューを作成する。
- テーブルに説明をつける。
参考にしたのは以下の3つのガイドです。
- Quickstart: Create and execute a SQL workflow in Dataform:Dataformのリポジトリ・ワークスペースを作成し、BigQueryにテーブルやビューを作成する。
- Create a table:SQLを使って、テーブル・ビュー・マテリアライズドビューを作成する。
- Add table documentation:テーブルおよびカラムに説明をつける。
やってみる
リポジトリの作成
まずはQuickstart: Create and execute a SQL workflow in Dataformを参考に、ワークスペースの作成までを行いました。
作業用のGoogleCloudプロジェクトに切り替えた状態で、ドキュメントのBefore you beginのEnable the BigQuery and Dataform APIs.でEnable the APIs
ボタンをクリックし、ガイドに従ってAPIを有効化しました。
また、IAMと管理
のIAM
から、自分が作業するユーザーに以下の権限があることを確認しました。
- Dataform Admin (
roles/dataform.admin
) :レポジトリ向け - Dataform Editor (
roles/dataform.editor
) :ワークスペース・ワークフロー実行向け
早速リポジトリを作ってみました。BigQueryのコンソールにて、Dataform
を左側のメニューからクリックし、Dataformの画面から+リポジトリを作成
を押しました。
リポジトリIDはquickstart-repository
とし、リージョンはasia-northeast1
としました。
作成
を押すと、リポジトリを作成しましたというメッセージが表示されます。このとき、Dataformがワークフローを実行するサービスアカウントがなにか表示されます。これは後で設定時に必要なので覚えておきましょう。
ちなみに忘れてしまった場合も、DataformのサービスアカウントIDはGrant Dataform access to BigQueryに記載されているので心配要りません。
リポジトリができたら、リポジトリの一覧から作成したリポジトリをクリックします。
ワークスペースの作成
次に、ワークスペースを作成します。ワークスペースについては、Introduction to developing in a workspaceに説明があります。ブランチのような、チームのリポジトリの編集可能なコピーにアクセスできる機能で、ほかのユーザーに影響を与えずコードを開発し、commitしたものをリポジトリにpushできます。コード編集だけでなく、SQLで定義したワークフローのグラフ表示の確認や、ワークフローの実行もできます。
CREATE DEVELOPMENT WORKSPACE
をクリックし、ワークスペースを作成します。
開発ワークスペースを作成
が開くので、ワークスペースIDを入力し、作成します。今回はquickstart-workspace
としました。
以下のようにワークスペースが作成されました。
今回はまっさらのリポジトリに新しくワークスペースを作成したので、ワークスペースの初期化をしておきます。ワークスペースを初期化
をクリックします。
以下のように初期プロジェクトが準備されました。
試しに、6件の変更をCOMMIT
を押すと、以下のようにコミットを作成することが可能できました。
SQLによる定義の作成
まず、QuickStartに沿って、データソースとなるquickstart-source.sqlx
と、quickstart-table.sqlx
を作成しました。
quickstart-source.sqlx
は、definitions
のメニューからファイルを作成
を押すと、ファイル名を指定してファイルが作成できました。
quickstart-source.sqlx
に、以下のようにビューを作成する定義を記載しました。
config { type: "view" } SELECT "apples" AS fruit, 2 as count UNION ALL SELECT "oranges" AS fruit, 5 as count UNION ALL SELECT "pears" AS fruit, 1 as count UNION ALL SELECT "bananas" AS fruit, 0 as count
また、quickstart-table.sqlx
も作成しました。
config { type: "table" } SELECT fruit, SUM(count) as count FROM ${ref("quickstart-source")} GROUP BY 1
編集し、コミットしていないファイルについては、ファイル名の左側に*
が付くようです。
サービスアカウントへのアクセス権限追加
IAMと管理
のアクセス件の付与
から、アクセス権の付与を行いました。
リポジトリ作成時に記載があったサービスアカウントIDを新しいプリンシパル
に入力しました。ロールに、BigQueryデータ編集者
・BigQueryデータ閲覧者
・BigQueryジョブユーザー
を追加し、保存しました。
アクションの実行
Dataformの画面に戻り、実行を開始
からすべてのアクション
を押しました。
ALL ACTIONS
から、実行を開始
を押しました。
以下のように、BigQueryにリソースが作成されました。
EXECUTIONSタブから実行履歴が確認できます。今回は成功したのでBigQueryにリソースが作成されていましたが、もしできていなかったり、結果が不安な場合は、こちらをみるとよいです。
マテリアライズドビューの作成
これまでの操作でテーブルとビューを作成しましたが、マテリアライズドビューも作成してみます。
マテリアライズドビューの定義については、Create a tableに例があったので試してみました。
以下のようにquickstart-materialized-view.sqlx
を作成しました。
config { type: "view", materialized: true } SELECT fruit, count FROM ${ref("quickstart-table")}
ところで、ここでコンパイルされたワークフローを確認してみました。
COMPILED GRAPH
タブから確認ができました。
今度は個別にアクションを実行してみました。quickstart-materialized-view.sqlx
を開いた状態で、SELECTION OF ACTIONS
から実行しました。
以下のように作成されました。
既存リソースの更新
データソースとなるビューについて、定義を更新してみました。以下のようにquickstart-source.sqlx
を修正しました。右上に実行
ボタンがあるので押してみたところ、クエリ結果が表示されました。ただしこれだけではBigQuery側には反映されていませんでした。
アクションを個別に実行することで、BigQuery側にも定義が反映されました。
テーブル・カラムへの説明の設定
Add table documentationを参考に、テーブルとカラムに説明を付けてみました。
SQLXテーブル定義ファイルのconfig
ブロックに、description
を追加することで、テーブルに説明を付けることができます。また、columns: {}
を追加することで、カラムに説明を付けることもできます。
実行すると、テーブルの説明が付けられていることが確認できました。
カラムにも説明が付いています。
最後に
Google CloudのDataformでBigQueryにテーブルを作成してみたので、試したことをまとめました。
レポジトリを使って、チームでテーブル定義ファイルの開発ができますし、依存関係のグラフも可視化してくれるのでテーブル間の関係性が分かりやすくとても便利でした。
今回は基本的な機能を中心に試してみましたが、ドキュメントを読みつつ、ほかの機能も試してみたいと思います。